package com.bao.lc.site.s3.gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Properties; import java.util.Vector; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.border.TitledBorder; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.bao.lc.ResMgr; import com.bao.lc.site.s3.TdUtils; import com.bao.lc.site.s3.bean.GenericBean; import com.bao.lc.site.s3.bean.PassengerInfo; import com.bao.lc.site.s3.bean.TicketFilterCondition; import com.bao.lc.site.s3.params.InputParameter; import com.bao.lc.util.AppUtils; import com.toedter.calendar.JDateChooser; @SuppressWarnings({ "rawtypes", "serial" }) public class InputInfoPanel extends JPanel { private static Log log = LogFactory.getLog(InputInfoPanel.class); private static final DateFormat ticketDateFormat = new SimpleDateFormat("yyyy-MM-dd"); private static final Insets DEFAULT_INSECT_LABEL = new Insets(2, 5, 3, 5); private static final Insets DEFAULT_INSECT_FIELD = new Insets(2, 10, 3, 10); private JPanel requiredPanel = new JPanel(); private JTextField userTextField = new JTextField(); private JTextField pwdTextField = new JPasswordField(); private JPanel ticketCondPanel = new JPanel(); private JTextField fromStation = new JTextField(); private JTextField toStation = new JTextField(); // private JTextField ticketDate = null; private JDateChooser ticketDateChooser = null; private JTextField seatClass = new JTextField(80); private JButton seatSelectBtn = new JButton(ResMgr.getString("td.seat_select")); private JPanel optionalPanel = new JPanel(); private JTextField trainClass = new JTextField(80); private JButton trainClassSelectBtn = new JButton(ResMgr.getString("td.train_class_select")); private JTextField ticketNo = new JTextField(80); private JCheckBox ticketNoFixCheckBox = new JCheckBox(ResMgr.getString("td.fix_train_no")); private JScrollPane passengerInfoPanel = new JScrollPane(); private DefaultTableModel passengerTableModel = null; private JTable passengerTable = null; private JPopupMenu tableRightMenu = null; private JMenuItem tableRemoveMenuItem = null; private static final int COL_PASSENGER_INFO = 0; private static final int COL_SELECT = 1; private static final int COL_CARD_TYPE = 3; private static final int COL_TICKET_TYPE = 6; private static final int COL_TICKET_SAVE = 7; public InputInfoPanel() { initGUI(); addListeners(); initData(); } private void initPassengerInfoPanel() { Vector columnNames = new Vector(); columnNames.add("passenger.info"); columnNames.add(ResMgr.getString("td.passenger.select")); columnNames.add(ResMgr.getString("td.passenger.name")); columnNames.add(ResMgr.getString("td.passenger.cardtype")); columnNames.add(ResMgr.getString("td.passenger.cardno")); columnNames.add(ResMgr.getString("td.passenger.phone")); columnNames.add(ResMgr.getString("td.passenger.tickettype")); columnNames.add(ResMgr.getString("td.passenger.issave")); int[] columnWidths = { 0, 50, 100, 100, 180, 125, 100, 110 }; passengerTableModel = new DefaultTableModel((Vector) null, (Vector) columnNames) { @Override public boolean isCellEditable(int row, int col) { return (col == COL_SELECT); } }; passengerTable = new JTable(passengerTableModel); passengerTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); passengerTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); // Show colors by rendering them in their own color. DefaultTableCellRenderer defaultRenderer = new DefaultTableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if(value == null) { return c; } // Convert column from view to model column = table.convertColumnIndexToModel(column); if(column == COL_CARD_TYPE) { List<GenericBean> cardTypes = TdUtils.getCardTypes(); String cardTypeName = GenericBean.getField(String.valueOf(value), 1, 0, cardTypes); setValue(cardTypeName); } else if(column == COL_TICKET_TYPE) { List<GenericBean> ticketTypes = TdUtils.getTicketTypes(); String ticketTypeName = GenericBean.getField(String.valueOf(value), 1, 0, ticketTypes); setValue(ticketTypeName); } else if(column == COL_TICKET_SAVE) { List<GenericBean> saveList = TdUtils.getSaveList(); String saveName = GenericBean.getField(String.valueOf(value), 1, 0, saveList); setValue(saveName); } return c; } }; CheckBoxCellRenderer selectRenderer = new CheckBoxCellRenderer(); DefaultCellEditor selectCellEditor = new DefaultCellEditor(new JCheckBox()); TableColumn column = null; for(int i = 0, columnCount = passengerTable.getColumnCount(); i < columnCount; i++) { column = passengerTable.getColumnModel().getColumn(i); if(i < columnWidths.length) { column.setPreferredWidth(columnWidths[i]); } if(i == COL_SELECT) { column.setCellRenderer(selectRenderer); column.setCellEditor(selectCellEditor); } else { column.setCellRenderer(defaultRenderer); } } column = passengerTable.getColumnModel().getColumn(COL_PASSENGER_INFO); passengerTable.removeColumn(column); passengerInfoPanel.getViewport().add(passengerTable); tableRightMenu = new JPopupMenu(); tableRemoveMenuItem = new JMenuItem(ResMgr.getString("td.remove")); tableRightMenu.add(tableRemoveMenuItem); } private void initTicketCondPanel() { ticketCondPanel.setLayout(new GridBagLayout()); requiredPanel.setLayout(new GridBagLayout()); // user and password JLabel userLabel = new JLabel(ResMgr.getString("td.user_name")); requiredPanel.add(userLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); requiredPanel.add(userTextField, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); JLabel pwdLabel = new JLabel(ResMgr.getString("td.password")); requiredPanel.add(pwdLabel, new GridBagConstraints(2, 0, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); requiredPanel.add(pwdTextField, new GridBagConstraints(3, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); // requiredPanel.add(new JLabel(""), new GridBagConstraints(4, 0, 2, 1, // 1.0, 1.0, // GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, // DEFAULT_INSECT_LABEL, 0, 0)); // from/to JLabel fromStationLabel = new JLabel(ResMgr.getString("td.label.from_station")); requiredPanel.add(fromStationLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); requiredPanel.add(fromStation, new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); JLabel toStationLabel = new JLabel(ResMgr.getString("td.label.to_station")); requiredPanel.add(toStationLabel, new GridBagConstraints(2, 1, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); requiredPanel.add(toStation, new GridBagConstraints(3, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); //Date JLabel ticketDateLabel = new JLabel(ResMgr.getString("td.label.ticket_date")); requiredPanel.add(ticketDateLabel, new GridBagConstraints(4, 1, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); /* * Replaced by JDateChooser MaskFormatter mf = null; try { mf = new MaskFormatter("####-##-##"); } catch(ParseException e) { log.error("MaskFormatter init failed.", e); } if(mf != null) { ticketDate = new JFormattedTextField(mf); } else { ticketDate = new JTextField(); } requiredPanel.add(ticketDate, new GridBagConstraints(5, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); */ ticketDateChooser = new JDateChooser(); ticketDateChooser.setLocale(Locale.SIMPLIFIED_CHINESE); ticketDateChooser.setDateFormatString("yyyy-MM-dd"); requiredPanel.add(ticketDateChooser, new GridBagConstraints(5, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); // seat class JLabel seatClassLabel = new JLabel(ResMgr.getString("td.label.seat_class")); requiredPanel.add(seatClassLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); requiredPanel.add(seatClass, new GridBagConstraints(1, 2, GridBagConstraints.RELATIVE, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); requiredPanel.add(seatSelectBtn, new GridBagConstraints(5, 2, GridBagConstraints.REMAINDER, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.VERTICAL, DEFAULT_INSECT_FIELD, 0, 0)); requiredPanel.setBorder(new TitledBorder(null, ResMgr.getString("td.required_parameter"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, null, Color.RED)); optionalPanel.setLayout(new GridBagLayout()); // train class JLabel trainClassLabel = new JLabel(ResMgr.getString("td.label.train_class")); optionalPanel.add(trainClassLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); optionalPanel.add(trainClass, new GridBagConstraints(1, 0, GridBagConstraints.RELATIVE, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); optionalPanel.add(trainClassSelectBtn, new GridBagConstraints(5, 0, GridBagConstraints.REMAINDER, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.VERTICAL, DEFAULT_INSECT_FIELD, 0, 0)); // train no JLabel ticketNoLabel = new JLabel(ResMgr.getString("td.label.ticket_no")); optionalPanel.add(ticketNoLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, DEFAULT_INSECT_LABEL, 0, 0)); optionalPanel.add(ticketNo, new GridBagConstraints(1, 1, GridBagConstraints.RELATIVE, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, DEFAULT_INSECT_FIELD, 0, 0)); optionalPanel.add(ticketNoFixCheckBox, new GridBagConstraints(5, 1, GridBagConstraints.REMAINDER, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.VERTICAL, DEFAULT_INSECT_FIELD, 0, 0)); optionalPanel.setBorder(new TitledBorder(null, ResMgr.getString("td.optional_parameter"), TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION, null, Color.BLUE)); ticketCondPanel.add(requiredPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, DEFAULT_INSECT_LABEL, 0, 0)); ticketCondPanel.add(optionalPanel, new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, DEFAULT_INSECT_LABEL, 0, 0)); } private void initGUI() { initTicketCondPanel(); initPassengerInfoPanel(); this.setLayout(new BorderLayout()); this.add(ticketCondPanel, BorderLayout.NORTH); this.add(passengerInfoPanel, BorderLayout.CENTER); this.setBorder(new TitledBorder(ResMgr.getString("td.user_info.border"))); } private void addListeners() { seatSelectBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { List<String> seatClassList = TdUtils.getSeatClassNameList(); List<Integer> selectedIndexList = TdUtils.toIndexList(seatClass.getText(), ",", seatClassList); SelectPanel contentPanel = new SelectPanel(seatClassList, selectedIndexList); DialogValueBuilder<List> builder = new DialogValueBuilder<List>(); builder.content(contentPanel).valueBean(contentPanel).owner(GUIUtils.getMainFrame()); builder.title(ResMgr.getString("td.seat_select")); builder.preferredSize(new Dimension(640, 320)); builder.parent(GUIUtils.getMainFrame()); List selectedItems = builder.build(); if(selectedItems != null) { seatClass.setText(TdUtils.toString(selectedItems, ",")); } } }); trainClassSelectBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { List<String> trainClassList = TdUtils.getTrainClassNameList(); List<Integer> selectedIndexList = TdUtils.toIndexList(trainClass.getText(), ",", trainClassList); SelectPanel contentPanel = new SelectPanel(trainClassList, selectedIndexList); DialogValueBuilder<List> builder = new DialogValueBuilder<List>(); builder.content(contentPanel).valueBean(contentPanel).owner(GUIUtils.getMainFrame()); builder.title(ResMgr.getString("td.train_class_select")); builder.preferredSize(new Dimension(640, 320)); builder.parent(GUIUtils.getMainFrame()); List selectedItems = builder.build(); if(selectedItems != null) { trainClass.setText(TdUtils.toString(selectedItems, ",")); } } }); passengerTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(!SwingUtilities.isRightMouseButton(e)) { return; } if(passengerTable.getSelectedRowCount() > 0) { tableRightMenu.show(passengerTable, e.getX(), e.getY()); } } }); tableRemoveMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int[] rows = passengerTable.getSelectedRows(); if(rows.length <= 0) { return; } Vector dataVec = passengerTableModel.getDataVector(); for(int i = rows.length - 1; i >= 0; i--) { dataVec.remove(rows[i]); } passengerTableModel.fireTableDataChanged(); } }); } private void initData() { seatClass.setEditable(false); trainClass.setEditable(false); this.loadData(AppUtils.getUserFilePath("auto_input.xml")); } public void addPassenger() { PassengerPanel pane = new PassengerPanel(null); DialogValueBuilder<PassengerInfo> pb = new DialogValueBuilder<PassengerInfo>(); pb.content(pane).valueBean(pane).owner(GUIUtils.getMainFrame()); pb.title(ResMgr.getString("td.main.toolbar.add_passenger")); pb.preferredSize(new Dimension(480, 320)); pb.parent(GUIUtils.getMainFrame()); PassengerInfo passenger = pb.build(); if(passenger == null) { return; } Vector rowData = addPassengerToTable(passenger); Vector dataVec = passengerTableModel.getDataVector(); dataVec.add(rowData); passengerTableModel.fireTableDataChanged(); } private Vector addPassengerToTable(PassengerInfo passenger) { Vector rowData = new Vector(); rowData.add(passenger); rowData.add(Boolean.TRUE); rowData.add(passenger.name); rowData.add(passenger.cardType); rowData.add(passenger.cardNo); rowData.add(passenger.phone); rowData.add(passenger.tiketType); rowData.add(passenger.isSave); return rowData; } public InputParameter getInputParam() { InputParameter param = new InputParameter(); param.user = GUIUtils.getFieldText(userTextField); param.pwd = GUIUtils.getFieldText(pwdTextField); param.fromStation = GUIUtils.getFieldText(fromStation); param.toStation = GUIUtils.getFieldText(toStation); param.ticketDate = getTicketDateStr(); param.passengers = getPassengerList(); param.filterCond = getFilterCondition(); return param; } public boolean checkParameter(InputParameter param, boolean showWarningDlg) { boolean result = false; do { result = checkField(StringUtils.isEmpty(param.user), ResMgr.getString("td.input.warning.user_empty"), showWarningDlg); if(!result) { break; } result = checkField(StringUtils.isEmpty(param.pwd), ResMgr.getString("td.input.warning.pwd_empty"), showWarningDlg); if(!result) { break; } result = checkField(StringUtils.isEmpty(param.fromStation), ResMgr.getString("td.input.warning.from_station_empty"), showWarningDlg); if(!result) { break; } result = checkField(StringUtils.isEmpty(param.toStation), ResMgr.getString("td.input.warning.to_station_empty"), showWarningDlg); if(!result) { break; } result = checkField(StringUtils.isEmpty(param.ticketDate), ResMgr.getString("td.input.warning.ticket_date_empty"), showWarningDlg); if(!result) { break; } result = checkField(param.passengers == null || param.passengers.isEmpty(), ResMgr.getString("td.input.warning.passenger_empty"), showWarningDlg); if(!result) { break; } // Seat Class boolean isFilterCond = param.filterCond == null || param.filterCond.seatClassList == null || param.filterCond.seatClassList.isEmpty(); result = checkField(isFilterCond, ResMgr.getString("td.input.warning.seat_class_empty"), showWarningDlg); if(!result) { break; } result = true; } while(false); return result; } private boolean checkField(boolean invalid, String message, boolean showWarningDlg) { if(invalid && showWarningDlg) { JOptionPane.showMessageDialog(this.getParent(), message, ResMgr.getString("td.input.warning.dialog.title"), JOptionPane.WARNING_MESSAGE); } return !invalid; } public boolean saveData(InputParameter parameter, String fileName) { Properties prop = new Properties(); parameter.save(prop); try { prop.storeToXML(new FileOutputStream(fileName), "Input Parameters", "UTF-8"); } catch(Exception e) { log.error("Failed to save file: " + fileName, e); return false; } return true; } public void loadData(String fileName) { File file = new File(fileName); if(!file.exists()) { log.info("The file doesn't exist: " + fileName); return; } Properties prop = new Properties(); try { prop.loadFromXML(new FileInputStream(file)); } catch(Exception e) { log.error("Failed to load file: " + fileName, e); return; } InputParameter parameter = new InputParameter(); parameter.load(prop); udpateView(parameter); } private void udpateView(final InputParameter parameter) { Runnable runner = new Runnable() { public void run() { userTextField.setText(parameter.user); pwdTextField.setText(parameter.pwd); fromStation.setText(parameter.fromStation); toStation.setText(parameter.toStation); setTicketDateStr(parameter.ticketDate); if(parameter.passengers != null && !parameter.passengers.isEmpty()) { Vector dataVec = passengerTableModel.getDataVector(); for(PassengerInfo passenger : parameter.passengers) { Vector rowData = addPassengerToTable(passenger); dataVec.add(rowData); } passengerTableModel.fireTableDataChanged(); } if(parameter.filterCond == null) { return; } //Seat Class if(parameter.filterCond.seatClassList != null) { List<GenericBean> seatClassList = TdUtils.getSeatClasses(); List<String> seatClassNameList = new ArrayList<String>(parameter.filterCond.seatClassList.size()); for(String seatClassIndex : parameter.filterCond.seatClassList) { String seatClassName = GenericBean.getField(seatClassIndex, 0, 1, seatClassList); seatClassNameList.add(seatClassName); } seatClass.setText(TdUtils.toString(seatClassNameList, TdUtils.DEFAULT_FIELD_DELIM)); } //Train Class if(parameter.filterCond.trainClassList != null) { List<GenericBean> trainClassList = TdUtils.getTrainClasses(); List<String> trainClassNameList = new ArrayList<String>(parameter.filterCond.trainClassList.size()); for(String trainClassValue : parameter.filterCond.trainClassList) { String trainClassName = GenericBean.getField(trainClassValue, 1, 0, trainClassList); trainClassNameList.add(trainClassName); } trainClass.setText(TdUtils.toString(trainClassNameList, TdUtils.DEFAULT_FIELD_DELIM)); } if(parameter.filterCond.trainNoList != null) { ticketNo.setText(TdUtils.toString(parameter.filterCond.trainNoList, TdUtils.DEFAULT_FIELD_DELIM)); } ticketNoFixCheckBox.setSelected(parameter.filterCond.fixedTrainNo); } }; runner.run(); // if(SwingUtilities.isEventDispatchThread()) // { // // } // else // { // SwingUtilities.invokeLater(runner); // } } private TicketFilterCondition getFilterCondition() { TicketFilterCondition cond = new TicketFilterCondition(); //Seat Class List<GenericBean> seatClassList = TdUtils.getSeatClasses(); List<String> seatClassNameList = TdUtils.toList(GUIUtils.getFieldText(seatClass), TdUtils.DEFAULT_FIELD_DELIM); List<String> seatClassIndexList = new ArrayList<String>(seatClassNameList.size()); for(String seatClassName : seatClassNameList) { String index = GenericBean.getField(seatClassName, 1, 0, seatClassList); seatClassIndexList.add(index); } cond.seatClassList = seatClassIndexList; //Train Class List<GenericBean> trainClassList = TdUtils.getTrainClasses(); List<String> trainClassNameList = TdUtils.toList(GUIUtils.getFieldText(trainClass), TdUtils.DEFAULT_FIELD_DELIM); List<String> trainClassValueList = new ArrayList<String>(trainClassNameList.size()); for(String trainClassName : trainClassNameList) { String trainClassValue = GenericBean.getField(trainClassName, 0, 1, trainClassList); trainClassValueList.add(trainClassValue); } cond.trainClassList = trainClassValueList; //Train No List cond.trainNoList = TdUtils.toList(GUIUtils.getFieldText(ticketNo), TdUtils.DEFAULT_FIELD_DELIM); //Fixed train no cond.fixedTrainNo = ticketNoFixCheckBox.isSelected(); return cond; } private List<PassengerInfo> getPassengerList() { List<PassengerInfo> passengers = new ArrayList<PassengerInfo>(5); Vector dataVec = passengerTableModel.getDataVector(); for(int i = 0, size = dataVec.size(); i < size; i++) { Vector rowData = (Vector)dataVec.get(i); Boolean isSelected = (Boolean)rowData.get(COL_SELECT); if(isSelected == null) { log.error("The value of column [" + COL_SELECT + "] is null"); continue; } if(isSelected.booleanValue()) { passengers.add((PassengerInfo)rowData.get(COL_PASSENGER_INFO)); } } return passengers; } private String getTicketDateStr() { Calendar calendar = ticketDateChooser.getCalendar(); if(calendar == null) { return ""; } return ticketDateFormat.format(calendar.getTime()); } private void setTicketDateStr(String str) { if(str == null) { return; } Date date = null; try { date = ticketDateFormat.parse(str); } catch(ParseException e) { log.warn("Failed to parse the str to date: " + str, e); } if(date == null) { return; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); ticketDateChooser.setCalendar(calendar); } private static class CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(value instanceof Boolean) { this.setSelected((Boolean)value); } return this; } } }